汇编语言系列Ⅰ 实现各种码制的转换

您所在的位置:网站首页 ah -1 汇编语言系列Ⅰ 实现各种码制的转换

汇编语言系列Ⅰ 实现各种码制的转换

#汇编语言系列Ⅰ 实现各种码制的转换| 来源: 网络整理| 查看: 265

软件:emu8086

语言:汇编语言(Assembly)

注意:本文列出了十六进制转二进制、十进制、ASCII码及大小写字母转换的代码,全部代码为博主独自一人编写,会有瑕疵,谨慎使用。

1.十六进制转换为二进制数设计

1.1设计要求:

设计转换程序,将键盘键入的四位十六进制数据转换为等值的二进制数,并在终端显示。要求:完善程序结构,设置程序错误出口。输入的不是0-F间的值,显示错误提示信息,并要求重新输入。

1.2设计思路:

依次输入四个十六进制数并依次存放到BX中,最后将BX中结果一位一位输出为二进制。

 

1.3程序清单:

DATA SEGMENT pkey DB "pleas input 4 hex(0~F):$" ekey DB 0dh,0ah,'it is wrong!',0dh,0ah,'pleas input 4 hex(0~F) again:','$' huiche DB 0dh,0ah,'result is:',0dh,0ah,'$' numm DB 5 dup(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX MOV CX,4 ;输入十六进制数循环4次 LEA SI,numm ;开辟变址寄存器SI LEA DX,pkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 lp: MOV AH, 1 INT 21H ;DOS功能调用,输入4个十六进制数 CMP AL,'9' JA abow9 CMP AL,'0' JB eero SUB AL,30h ;输入为0~9时ASCII码减30H存放 JMP lop eero:LEA DX, ekey ;输入不在0~9且不在A~F时,显示错误 MOV AH, 9 INT 21H JMP lp abow9:CMP AL,'A' JNB abowa JMP eero abowa:CMP AL,'F' JA eero SUB AL,37h ;输入为A~F时ASCII码减37H存放 JMP lop lop: MOV [SI],AL ROL BX,4 ADD BX,[SI] ;将输入的数据存入BX寄存器中 INC SI DEC CX JNZ lp MOV CX,16 ;输出二进制数循环16次 LEA DX,huiche MOV AH,9 INT 21H ;DOS功能调用,输出字符串 lp1: ROL BX,1 ;左移1位后显示的是最高位 MOV DL,BL AND DL,01H ;屏蔽DL高7位 ADD DL,30H ;加30H对应ASCII码 MOV AH,2 INT 21H ;DOS功能调用,将内容按位输出 DEC CX JNZ lp1 CODE ENDS END STATE

1.4程序运行结果及分析:

存放和输出时会遇到一些小问题,本程序通过移位和加法指令实现存放,比较麻烦但可以实现,后面的程序有所改进。

图1 十六进制转换为二进制数设计结果

2.十六进制转换为十进制数设计

2.1设计要求:

设计转换程序,将键盘输入的一位十六进制数转换为等值的十进制数,并在终端显示。设计要求:完善程序结构,设置程序错误出口。输出的不是0-F间的数字,显示错误提示信息,并要求重新输入。

2.2设计思路:

输入一位十六进制数,判断是否为0~9,a~f,A~F,各自转换后输出。

 

2.3程序清单:

DATA SEGMENT pkey DB 0dh,0ah,"pleas input 1 hex(0~F):$" huiche DB 0dh,0ah,'result is:$' end2 DB 0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$' numm DB 3 dup(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX LEA SI,numm ;开辟缓冲区 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 LP: MOV AH, 1 INT 21H ;DOS功能调用,输入1个十六进制数 CMP AL,'9' JA abow9 CMP AL,'0' JB eero ;输入小于0重新输入 ADD AH,2FH ;输入为0~9高位给0输出 JMP OUTPUT abow9: CMP AL,'A' JNB abowA JMP eero ;输入大于9小于A重新输入 abowA:CMP AL,'F' JA abowF SUB AL,11H ADD AH,30H ;输入A~F高位给1,低位减11H输出 JMP OUTPUT abowF:CMP AL,'a' JNB abow1a JMP eero ;输入大于F小于a重新输入 abow1a:CMP AL,'f' JA eero ;输入大于f重新输入 SUB AL,31H ADD AH,30H ;输入a~f高位给1,低位减31H输出 JMP OUTPUT eero:LEA DX,end2 MOV AH,9 INT 21H ;DOS功能调用,输出错误字符串 JMP LP OUTPUT: MOV BX,AX LEA DX,huiche MOV AH,9 INT 21H ;DOS功能调用,输出字符串 MOV [SI],BH MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能调用,高位输出 MOV [SI],BL MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能调用,低位输出 JMP STATE CODE ENDS END STATE

2.4程序运行结果及分析:

这里输出分高位和低位输出,因为是一位十六进制数的转换,如果换两位或更多就需要将程序修改到更智能化。

图2 十六进制转换为十进制数设计结果

3.十六进制转换为ASCII码

3.1设计要求:

设计转换程序,将键盘键入的十六进制数据转换为对应的ASCII码,并在终端显示。

3.2设计思路:

将输入数的高位左移转ASCII输出,低位转ASCII输出。

3.3程序清单:

DATA SEGMENT pkey DB 0dh,0ah,"please input 1 hex(0~F):$" huiche DB 0dh,0ah,'result is:$' end2 DB 0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$' numm DB 3 dup(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX LEA SI,numm ;开辟缓冲区 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 LP: MOV AH, 1 INT 21H ;DOS功能调用,输入1个十六进制数 CMP AL,'9' JA abow9 CMP AL,'0' JB end1 ;输入小于0重新输入 JMP OUTPUT abow9: CMP AL,'A' JNB abowA JMP end1 ;输入大于9小于A重新输入 abowA:CMP AL,'F' JA end1 ;输入大于F重新输入 JMP OUTPUT end1:LEA DX,end2 MOV AH,9 INT 21H ;DOS功能调用,输出错误字符串 JMP LP OUTPUT: MOV BX,AX ROL BX,4 AND BH,0FH ADD BH,30H ;高位是AX左移四位再加30H得到 AND AL,0FH MOV BL,AL ADD BL,30H ;低位是AL低四位加30H得到 LEA DX,huiche MOV AH,9 INT 21H ;DOS功能调用,输出字符串 MOV [SI],BH MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能调用,高位输出 MOV [SI],BL MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能调用,低位输出 JMP STATE CODE ENDS END STATE

3.4程序运行结果及分析:

图3 十六进制转换为ASCII码设计结果

4.英文字母大小写转换设计

4.1设计要求:

英文字母大小写转换本质上是ASCII码直接的转换。要求掌握大小写字母在计算机内的表示方法及转换方法。设计程序,连续将键盘输入的小写字母转换为大写字母,并在终端显示。设计要求:小写字母转换为大写字母输出,非字母或大写字母输入,不做处理直接输出。

4.2设计思路:

判断输入是否为a~z,是的话减20H输出,不是直接输出。

4.3程序清单:

DATA SEGMENT pkey DB 0dh,0ah,"pleas input:$" result DB 0dh,0ah,'result is:','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX ;初始化数据段 LP: LEA DX,pkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 MOV AH, 1 INT 21H ;DOS功能调用,键盘输入 CMP AL,'z' JA LLP CMP AL,'a' ;输入不在a~z之间直接输出 JB LLP SUB AL,20H ;输入为a~z转换,ASCII码减20H MOV BL,AL OUTPUT: LEA DX,result MOV AH,9 INT 21H ;DOS功能调用,输出字符串 MOV DL,BL MOV AH,2 INT 21H ;DOS功能调用,输出DL中内容 JMP LP LLP: MOV BL,AL JMP OUTPUT CODE ENDS END STATE

4.4程序运行结果及分析:

图4 英文字母大小写转换设计结果

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3